/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package RRHH_controlador;

import ADMINISTRACION_MODELO.ADM_TIPO_ACTIVO_FUNGIBLE;
import ADMINISTRACION_MODELO.ADM_TIPO_ACT_FUN_USU;
import Conexion.Conexion;
import Modelo.SIS_LOG;
import Modelo.SIS_PERFILES;
import RRHH_Modelo.RHH_ACTIVIDAD;
import RRHH_Modelo.RHH_ACTIVIDAD_CARGO;
import RRHH_Modelo.RHH_CALENDARIO_EMPRESA;
import RRHH_Modelo.RHH_CARGO;
import RRHH_Modelo.RHH_CARGO_DATOS;
import RRHH_Modelo.RHH_CARGO_DEP_REG_SUC;
import RRHH_Modelo.RHH_CARGO_HORARIO;
import RRHH_Modelo.RHH_CARGO_PERFIL;
import RRHH_Modelo.RHH_CATEGORIA_DATO;
import RRHH_Modelo.RHH_CONTRATO_DIRECTO;
import RRHH_Modelo.RHH_CUENTAS;
import RRHH_Modelo.RHH_DATOS;
import RRHH_Modelo.RHH_DEPARTAMENTO;
import RRHH_Modelo.RHH_FECHAS_HITO;
import RRHH_Modelo.RHH_HORARIO;
import RRHH_Modelo.RHH_PERSONA;
import RRHH_Modelo.RHH_PERSONA_DATOS;
import RRHH_Modelo.RHH_PERSONA_PROFESION;
import RRHH_Modelo.RHH_PROFESION;
import RRHH_Modelo.RHH_REGIONAL;
import RRHH_Modelo.RHH_REGIONAL_DEPTO;
import RRHH_Modelo.RHH_SUCURSAL;
import RRHH_Modelo.RHH_TELEFONOS;
import RRHH_Modelo.RHH_TIPOS_CARGO;
import RRHH_Modelo.RHH_TIPO_DIA;
import RRHH_Modelo.RHH_USUARIO;
import it.sauronsoftware.ftp4j.FTPAbortedException;
import it.sauronsoftware.ftp4j.FTPClient;
import it.sauronsoftware.ftp4j.FTPDataTransferException;
import it.sauronsoftware.ftp4j.FTPException;
import it.sauronsoftware.ftp4j.FTPIllegalReplyException;
import java.io.IOException;
import java.io.InputStream;
import java.io.PrintWriter;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.GregorianCalendar;
import java.util.List;
import java.util.StringTokenizer;
import javax.servlet.ServletException;
import javax.servlet.annotation.MultipartConfig;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.Part;

/**
 *
 * @author equipo_2
 */
@MultipartConfig
@WebServlet(name = "RRHH_ORGANIGRAMA_CONTROLLER", urlPatterns = {"/RRHH_ORGANIGRAMA_CONTROLLER"})
public class RRHH_ORGANIGRAMA_CONTROLLER extends HttpServlet {

    /**
     * Processes requests for both HTTP <code>GET</code> and <code>POST</code>
     * methods.
     *
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        response.setContentType("text/html;charset=UTF-8");
        try (PrintWriter out = response.getWriter()) {

        }
    }

    // <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code.">
    /**
     * Handles the HTTP <code>GET</code> method.
     *
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
    }

    /**
     * Handles the HTTP <code>POST</code> method.
     *
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        String proceso = request.getParameter("proceso");
        RHH_USUARIO usuario = ((RHH_USUARIO) request.getSession().getAttribute("usr"));
        Conexion con = new Conexion(usuario.getUSUARIO(), usuario.getPASSWORD());
        String html = "";
        try {
            con.Transacction();
            switch (proceso) {

                case "insertarTipo":
                    html = insertarTCargo(con, request);
                    break;
              
                case "validarci":
                    html = validarci(request, con);
                    break;
                case "telefonosDisponible":
                    html = telefonosDisponible(request, con);
                    break;
                case "GuardarNuevo":
                    html = GuardarNuevo(request, con, usuario);
                    break;
                case "modificarempleado":
                    html = modificarempleado(request, con);
                    break;
                case "promoverPersona":
                    html = promoverPersona(request, con);
                    break;
               
                case "incrementosalarial":
                    html = incrementosalarial(request, con);
                    break;
                case "listacargo":
                    html = incrementosalarial(request, con);
                    break;
                
                case "insertarDato":
                    html = insertardato(con, request);
                    break;
                case "eliminarActividad":
                    html = eliminarActividad(request, con);
                    break;
                case "buscarDependiente":
                    html = buscarDependiente(con, request);
                    break;
                case "insertarDocs":
                    html = insertardocs(con, request);
                    break;
                case "eliminarDato":
                    html = eliminarDato(con, request, usuario);
                    break;
                case "obtenerCargo":
                    html = obtenerCargo(request,con,usuario);
                    break;
                case "buscarRegional":
                    html = buscarRegional(request, con);
                    break;
                case "buscarSucursales":
                    html = buscarSucursales(request, con);
                    break;
                case "cambiarReferencia":
                    html = cambiarReferencia(request, con);
                    break;
                case "nuebacatdato":
                    html = nuebacatdato(con, request, usuario);
                    break;
                case "cargarPerfiles":
                    html = cargarPerfiles(con, request);
                    break;
                case "cargarHorario":
                    html = cargarHorario(con, request);
                    break;
                case "agregaractividad":
                    html = agregaractividad(con, request);
                    break;
                case "cargarCalendario":
                    html = cargarCalendario(con, request);
                    break;
                case "agregarPerfil":
                    html = agregarPerfil(con, request, usuario);
                    break;
                case "agregarhorario":
                    html = agregarhorario(con, request, usuario);
                    break;
                case "crearActividad":
                    html = crearActividad(con, request);
                    break;
                case "eliminarActividadCargo":
                    html = eliminarActividadCargo(con, request);
                    break;
                case "guardarusuario":
                    html = guardarusuario(request, con);
                    break;
                case "comprobarNick":
                    html = comprobarNick(request, con);
                    break;
                case "eliminarCargo":
                    html = eliminarCargo(request, con);
                    break;
                case "suspenderempleado":
                    html = suspenderempleado(request, con);
                    break;
                case "retirar":
                    html = retirar(request, con);
                    break;
                case "listaCargo":
                    html = listaCargo(request, con,usuario);
                    break;
            }
            con.commit();
        } catch (Exception e) {
            con.rollback();
            html = "false";
        }

        response.setCharacterEncoding("UTF-8");
        response.setContentType("text/plain");
        response.getWriter().write(html);
        con.Close();

    }

    private String listaCargo(HttpServletRequest request, Conexion con,RHH_USUARIO usuario) throws SQLException, ParseException {
        RHH_CARGO cargo = new RHH_CARGO(con);
        RHH_DEPARTAMENTO departamento = new RHH_DEPARTAMENTO(con);
        RHH_REGIONAL regio = new RHH_REGIONAL(con);
        RHH_SUCURSAL sucu = new RHH_SUCURSAL(con);
        sucu.setCon(con);
        RHH_CARGO_DEP_REG_SUC depregsuc = new RHH_CARGO_DEP_REG_SUC(con);
        List< RHH_CARGO> listaCargo = cargo.Todos();
        String array = "[";
        RHH_PROFESION profe = new RHH_PROFESION(con);
        RHH_FECHAS_HITO hito = new RHH_FECHAS_HITO(con);
        for (int i = 0; i < listaCargo.size(); i++) {
            RHH_PERSONA persona = new RHH_PERSONA(con);
            cargo = listaCargo.get(i);
            depregsuc = depregsuc.BuscarXCargos(cargo.getID());
            int id = cargo.getID();
            List< RHH_USUARIO> listau = usuario.BuscarXCargo(id);
            String notificacion = "";
            String listaUsuario = "";
            String blokeado = "1";
            if (listau.size() == 0) {
                usuario = new RHH_USUARIO(con);
                listaUsuario = "[]";
                notificacion = "\",\"cantusu\":\"" + 0;
                blokeado = "0";
            } else {
                notificacion = "\",\"cantusu\":\"" + listau.size();
                for (int j = 0; j < listau.size(); j++) {
                    usuario = listau.get(j);
                    persona = persona.BuscarxID(usuario.getID_PERSONA());
                    profe = profe.Buscar(persona.getID());
                    double sueldo = hito.salarioUsuario(usuario.getID());
                    String prof = "N/A";
                    if (profe == null) {
                        profe = new RHH_PROFESION(con);
                    } else {
                        prof = profe.getDESCRIPCION();
                    }
                    if (blokeado.equals("1")) {
                        blokeado = usuario.blockeado() + "";
                    }
                    listaUsuario += "{\"nombre\":\"" + persona.getPRIMER_NOMBRE() + " " + persona.getPRIMER_APELLIDO()
                            + "\",\"ci\":\"" + persona.getCI() + "\",\"idPersona\":\"" + persona.getID() + "\",\"suspendido\":\"" + usuario.blockeado() + "\",\"profesion\":\"" + prof + "\",\"foto\":\"" + persona.getFOTO() + "\",\"salario\":\"" + sueldo + "\"},";
                }
                listaUsuario = "[" + listaUsuario.substring(0, listaUsuario.length() - 1) + "]";
                usuario = listau.get(0);
                persona = persona.BuscarxID(usuario.getID_PERSONA());
            }
            try {
                String foto = "../img/imagen3.jpg";
                profe = profe.Buscar(persona.getID());
                String prof = "N/A";
                if (profe == null) {
                    profe = new RHH_PROFESION(con);
                } else {
                    prof = profe.getDESCRIPCION();
                }
                regio = regio.BuscarXid(depregsuc.getID_REGIONAL());
                sucu = sucu.BuscarXid(depregsuc.getID_SUCURSAL());
                String descregio = "TODAS";
                String descsuc = "TODAS";
                double sueldo = hito.salarioUsuario(usuario.getID());
                if (regio != null) {
                    descregio = regio.getDESCRIPCION();
                } else {
                    regio = new RHH_REGIONAL(con);
                }
                if (sucu != null) {
                    descsuc = sucu.getDESCRIPCION();
                } else {
                    sucu = new RHH_SUCURSAL(con);
                    sucu.setCon(con);
                }
                String staff = "";
                if (cargo.getSTAFF() == 0) {
                    staff = ",\"staff\": [3,2]";
                }
                departamento = departamento.BuscarXid(depregsuc.getID_DEPTO());
                String descdpto = "GERENCIA GENERAL";
                String nombreem = "Sin Empleado";
                if (persona.getPRIMER_NOMBRE() != null && persona.getPRIMER_NOMBRE().length() > 0) {
                    nombreem = persona.getPRIMER_NOMBRE() + " " + persona.getPRIMER_APELLIDO();
                }
                if (departamento != null) {
                    descdpto = departamento.getDESCRIPCION();
                } else {
                    departamento = new RHH_DEPARTAMENTO(con);
                }
                array += "{\"key\":\"" + cargo.getID() + "\", \"parent\":\""
                        + cargo.getID_DEPENDENCIA() + "\",\"idPersona\":\""
                        + persona.getID() + "\",\"salario\":\"" + sueldo
                        + "\",\"suc\":\"" + descsuc + "\",\"reg\":\"" + descregio + "\",\"suspendido\":\""
                        + blokeado + "\",\"regional\":\""
                        + depregsuc.getID_REGIONAL() + "\",\"iddep\":\""
                        + depregsuc.getID_DEPTO() + "\",\"idsucursal\":\""
                        + depregsuc.getID_SUCURSAL() + "\",\"Cargo\":\""
                        + cargo.getDESCRIPCION() + "\",\"listaUsuario\":"
                        + listaUsuario + ",\"nombre\":\"" + nombreem + notificacion + "\",\"foto\":\"" + foto + "\",\"profesion\":\""
                        + prof + "\", \"dpto\":\"" + descdpto + "\" " + staff + "},";
            } catch (Exception e) {
            }
        }
        Calendar c = Calendar.getInstance();
        int mes=c.get(Calendar.MONTH);
        int ano=c.get(Calendar.YEAR);
        array = array.substring(0, array.length() - 1) + "]";
        return "{\"lista\":"+array+",\"mes\":\""+mes+"\",\"ano\":\""+ano+"\"}";
    }

    private String retirar(HttpServletRequest request, Conexion con) throws SQLException, ParseException {
        int id = Integer.parseInt(request.getParameter("id"));
        String observacion = request.getParameter("observacion");
        String fecha = request.getParameter("fecha");
        int tipo = Integer.parseInt(request.getParameter("tipo"));
        RHH_USUARIO us = new RHH_USUARIO(con).BuscarXidPersona(id);

        String cargo = new RHH_CARGO(con).BuscarXid(us.getID_CARGO()).getDESCRIPCION();
        SimpleDateFormat formato = new SimpleDateFormat("dd/MM/yyyy");

        int tipoevento = 0;
        if (tipo == 0) {
            tipoevento = 2;
        }
        if (tipo == 1) {
            tipoevento = 1;
        }
        if (tipo == 2) {
            tipoevento = 1;
        }
        if (tipo == 3) {
            tipoevento = 1;
        }
        if (tipo == 4) {
            tipoevento = 21;
        }
        if (tipo == 5) {
            tipoevento = 1;
        }

        RHH_FECHAS_HITO fechai = new RHH_FECHAS_HITO(0, observacion, formato.parse(fecha), 0.0, us.getID(), cargo, tipoevento);
        fechai.setCon(con);
        fechai.Insertar();
        us.Desactivar();
        return "true";
    }

    

    private String eliminarActividad(HttpServletRequest request, Conexion con) throws SQLException {
        RHH_ACTIVIDAD acti = new RHH_ACTIVIDAD(con);
        int key = Integer.parseInt(request.getParameter("id"));
        acti.EliminarXid(key);
        return "true";
    }

    private String suspenderempleado(HttpServletRequest request, Conexion con) throws SQLException, IOException, ServletException, ParseException, IllegalStateException, FTPIllegalReplyException, FTPException, FTPDataTransferException, FTPAbortedException {
        RHH_USUARIO usu = new RHH_USUARIO(con);
        usu = usu.BuscarXidPersona(Integer.parseInt(request.getParameter("id")));
        RHH_FECHAS_HITO hito = new RHH_FECHAS_HITO(con);
        Calendar c = new GregorianCalendar();
        hito.setFECHA(c.getTime());
        hito.setID_USUARIO(usu.getID());
        RHH_PERSONA per = new RHH_PERSONA(con);
        per = per.BuscarxID(usu.getID_PERSONA());
        if (request.getParameter("suspendido").equals("1")) {
            usu.Activar();
            hito.setID_EVENTO_HITO(42);
            hito.setDESCRIPCION("El empleado " + per.getPRIMER_NOMBRE() + " " + per.getPRIMER_APELLIDO() + " fue habilitado");
        } else {
            usu.Desactivar();
            hito.setID_EVENTO_HITO(41);
            hito.setDESCRIPCION("El empleado " + per.getPRIMER_NOMBRE() + " " + per.getPRIMER_APELLIDO() + " fue Suspendido");
        }
        hito.Insertar();
        return "";
    }

    private String promoverPersona(HttpServletRequest request, Conexion con) throws SQLException, IOException, ServletException, ParseException, IllegalStateException, FTPIllegalReplyException, FTPException, FTPDataTransferException, FTPAbortedException {
        double idpersona = Double.parseDouble(request.getParameter("id"));
        double sueldo = Double.parseDouble(request.getParameter("sueldo"));
        double nuevocargo = Double.parseDouble(request.getParameter("cargo"));
        String persona = request.getParameter("nombre");
        String cargo = request.getParameter("cargonom");
        String desc = request.getParameter("desc");
        RHH_USUARIO usuario = new RHH_USUARIO(con);
        usuario = usuario.BuscarXidPersona(idpersona);
        RHH_FECHAS_HITO hito = new RHH_FECHAS_HITO(con);
        Calendar c = new GregorianCalendar();
        hito.EliminarIncrementoSalarial(usuario.getID());
        hito = new RHH_FECHAS_HITO(con);
        hito.setFECHA(c.getTime());
        usuario.ModificarCargo(nuevocargo);
        hito.setDESCRIPCION("El empleado " + persona + " fue promovido a " + cargo);
        hito.setID_USUARIO(usuario.getID());
        hito.setSALARIO(sueldo);
        hito.setID_EVENTO_HITO(9);
        hito.Insertar();
        String[] listaDep = desc.split(",");
        for (int i = 0; i < listaDep.length; i++) {
            if (listaDep[i].length() == 0) {
                continue;
            }
            String[] ev = listaDep[i].split(":");
            hito.setID_EVENTO_HITO(Integer.parseInt(ev[0]));
            String aux = "";
            if (ev[0].equals("4")) {
                aux = "a la sucursal ";
            }
            if (ev[0].equals("5")) {
                aux = "a la regional ";
            }
            if (ev[0].equals("6")) {
                aux = "al departamento ";
            }
            hito.setDESCRIPCION("El empleado " + persona + " fue trasladado " + ev[1]);
            hito.Insertar();
        }
        return "true";
    }

    private String eliminarCargo(HttpServletRequest request, Conexion con) throws SQLException, IOException, ServletException, ParseException, IllegalStateException, FTPIllegalReplyException, FTPException, FTPDataTransferException, FTPAbortedException {
        RHH_CARGO cargo = new RHH_CARGO(con);
        cargo.setID(Integer.parseInt(request.getParameter("cargo")));
        return cargo.EliminarXid() + "";
    }

    private String comprobarNick(HttpServletRequest request, Conexion con) throws SQLException, IOException, ServletException, ParseException, IllegalStateException, FTPIllegalReplyException, FTPException, FTPDataTransferException, FTPAbortedException {
        RHH_USUARIO usu = new RHH_USUARIO(con);
        int existe = usu.existeCuenta(request.getParameter("usuario"));
        return existe + "";
    }

    private String incrementosalarial(HttpServletRequest request, Conexion con) throws SQLException, IOException, ServletException {
        RHH_FECHAS_HITO hito = new RHH_FECHAS_HITO(con);
        RHH_USUARIO usu = new RHH_USUARIO(con);
        String nombre = request.getParameter("nombre");
        double incremento = Double.parseDouble(request.getParameter("incremento"));
        int persona = Integer.parseInt(request.getParameter("persona"));
        usu = usu.BuscarXidPersona(persona);
        hito.setID_USUARIO(usu.getID());
        hito.setDESCRIPCION("Se incremento el sueldo en " + incremento + " al empleado " + nombre);
        Calendar c = new GregorianCalendar();
        hito.setFECHA(c.getTime());
        hito.setSALARIO(incremento);
        hito.setID_EVENTO_HITO(8);
        hito.Insertar();
        return "true";
    }

    private String guardarusuario(HttpServletRequest request, Conexion con) throws SQLException, IOException, ServletException, ParseException, IllegalStateException, FTPIllegalReplyException, FTPException, FTPDataTransferException, FTPAbortedException {
        con.Transacction();
        RHH_PERSONA persona = new RHH_PERSONA(con);
        String ci = request.getParameter("ci");

        String depto = request.getParameter("depto");
        String nombre1 = request.getParameter("nombre1");
        String nombre2 = request.getParameter("nombre2");
        String apepat = request.getParameter("apepat");
        String apemat = request.getParameter("apemat");
        String email = request.getParameter("email");
        String telf = request.getParameter("telf");
        Part part = request.getPart("curr");

        InputStream in = part.getInputStream();

        RHH_REGIONAL reg = new RHH_REGIONAL(con);
        reg.setCon(con);
        reg = reg.BuscarXid(Double.parseDouble(depto));
        if (part != null && part.getSubmittedFileName().length() > 0) {
            String parrr = "curriculum_" + part.getSubmittedFileName();
            persona.setCURRICULUM(parrr);
            subirftp(in, ci, parrr, part.getSize(), "");
        }
        persona.setCI(Integer.parseInt(ci));
        persona.setEMAIL(email);
        persona.setLUGAR_EMISION(reg.getACRONIMO());
        persona.setPRIMER_APELLIDO(apepat);
        persona.setPRIMER_NOMBRE(nombre1);
        persona.setSEGUNDO_NOMBRE(nombre2);
        persona.setSEGUNDO_APELLIDO(apemat);
        persona.setTELEFONO(telf);
        int idper = persona.Insertar();

        List<RHH_DATOS> dtlist = new RHH_DATOS(con).TodosDatos();

        for (int i = 0; i < dtlist.size(); i++) {
            RHH_PERSONA_DATOS pd = new RHH_PERSONA_DATOS(con);
            String dato = request.getParameter(dtlist.get(i).getID() + "");
            String fecha = request.getParameter(dtlist.get(i).getID() + "_o");
            if (dato != null) {
                if (dato.length() > 0) {
                    pd.setID_DATOS(dtlist.get(i).getID());
                    pd.setID_PERSONA(idper);
                    pd.setDATO(dato);
                    if (fecha != null && fecha.length() != 0) {
                        SimpleDateFormat dt = new SimpleDateFormat("dd/MM/YYYY");
                        pd.setCADUCIDAD(dt.parse(fecha));
                    }
                    pd.Insertar();
                }
            }
        }
        List<RHH_DATOS> doclist = new RHH_DATOS(con).TodosDocs();

        for (int i = 0; i < doclist.size(); i++) {
            RHH_PERSONA_DATOS pd = new RHH_PERSONA_DATOS(con);
            Part pdoc = request.getPart(doclist.get(i).getID() + "");
            if (pdoc != null) {
                String nom = pdoc.getSubmittedFileName();
                if (nom.length() > 0) {
                    pd.setID_DATOS(doclist.get(i).getID());
                    pd.setID_PERSONA(idper);
                    pd.setDATO(pdoc.getSubmittedFileName());
                    pd.Insertar();
                    in = pdoc.getInputStream();
                    subirftp(in, ci, pdoc.getSubmittedFileName(), pdoc.getSize(), "");
                }
            }
        }
        String anosexp = request.getParameter("anos");
        String prof = request.getParameter("prof");

        RHH_PERSONA_PROFESION pf = new RHH_PERSONA_PROFESION(con);
        pf.setID_PERSONA(idper);
        pf.setID_PROFESION(Integer.parseInt(prof));
        pf.setANOS(Integer.parseInt(anosexp));
        pf.Insertar();

        String usrs = request.getParameter("usrs");
        String pass = request.getParameter("pass");
        String cargo = request.getParameter("cargoe");

        RHH_USUARIO usu = new RHH_USUARIO(con);
        usu.setUSUARIO(usrs);
        usu.setPASSWORD(pass);
        usu.setID_PERSONA(idper);
        usu.setID_CARGO(Integer.parseInt(cargo));
        usu.setESTADO(1);
        usu.setFLAG(1);
        usu.Insertar();
        RHH_TELEFONOS telfo = new RHH_TELEFONOS(con);
        for (int i = 0; i < 100; i++) {
            String telf1 = request.getParameter("telefono" + i);
            if (telf1 != null && !telf1.equals("0")) {
                Double monto = Double.parseDouble(request.getParameter("montotelf" + i));
                telfo = telfo.BuscarxId(Integer.parseInt(telf1));
                telfo.setID_USUARIO(usu.getID());
                telfo.setMONTO_CREDITO(monto);
                telfo.modificar();
            } else {
                break;
            }
        }

        for (int i = 0; i < 100; i++) {
            RHH_CUENTAS cuenta = new RHH_CUENTAS(con);
            String ncuenta = request.getParameter("cuenta" + i);

            if (ncuenta != null && !ncuenta.equals("")) {

                String banco = request.getParameter("banco" + i);
                cuenta.setBANCO(banco);
                cuenta.setCUENTA(ncuenta);
                cuenta.setID_USUARIO(usu.getID());
                cuenta.Insertar();
            } else {
                break;
            }
        }

        String fechai = request.getParameter("fecha_ini");
        String fechaf = request.getParameter("fecha_fin");

        SimpleDateFormat format = new SimpleDateFormat("dd/MM/yyyy");
        RHH_FECHAS_HITO fh = new RHH_FECHAS_HITO(con);
        RHH_CARGO ca = new RHH_CARGO(con);
        ca.BuscarXid(Integer.parseInt(cargo));
        fh.setDESCRIPCION("CONTRATACION");
        fh.setID_EVENTO_HITO(3);
        fh.setID_USUARIO(usu.getID());
        fh.setFECHA(format.parse(fechai));
        fh.setDESCRIPCION_CARGO(ca.getDESCRIPCION());
        fh.Insertar();
        if (!fechaf.equals("INDETERMINADO")) {
            fh = new RHH_FECHAS_HITO(con);
            fh.setDESCRIPCION("FINALIZACION DE CONTRATO");
            fh.setID_EVENTO_HITO(21);
            fh.setID_USUARIO(usu.getID());
            fh.setSALARIO(0.0);
            fh.setFECHA(format.parse(fechaf));
            fh.Insertar();
        }

        List<ADM_TIPO_ACTIVO_FUNGIBLE> af = new ADM_TIPO_ACTIVO_FUNGIBLE(con).TodosActivos();
        for (int i = 0; i < af.size(); i++) {
            String act = request.getParameter("activo_" + af.get(i).getID());

            if (act != null) {
                String cant = request.getParameter("activo_cant_" + af.get(i).getID());
                if (cant.length() == 0) {
                    continue;
                }
                ADM_TIPO_ACT_FUN_USU tafu = new ADM_TIPO_ACT_FUN_USU(usu.getID(), af.get(i).getID(), Integer.parseInt(cant));
                tafu.setCon(con);
                tafu.Insertar();
            }
        }
        af = new ADM_TIPO_ACTIVO_FUNGIBLE(con).TodosFungibles();
        for (int i = 0; i < af.size(); i++) {
            String act = request.getParameter("fungibles_" + af.get(i).getID());

            if (act != null) {
                String cant = request.getParameter("fungibles_cant_" + af.get(i).getID());
                if (cant.length() == 0) {
                    continue;
                }
                ADM_TIPO_ACT_FUN_USU tafu = new ADM_TIPO_ACT_FUN_USU(usu.getID(), af.get(i).getID(), Integer.parseInt(cant));
                tafu.setCon(con);
                tafu.Insertar();
            }
        }

        int contratante = ((RHH_USUARIO) request.getSession().getAttribute("usr")).getID();
        RHH_CONTRATO_DIRECTO siolici = new RHH_CONTRATO_DIRECTO(usu.getID(), contratante);
        siolici.setCon(con);
        if (siolici.BuscarXcontratado(usu.getID()) == null) {
            siolici.Insertar();
        } else {
            siolici.modificar();
        }

        Part part45 = request.getPart("file");
        if (part45 != null && part45.getSubmittedFileName().length() > 0) {
            InputStream in45 = part45.getInputStream();
            RHH_PERSONA per = new RHH_PERSONA(con).BuscarxID(idper);
            String nombre = "perfil_" + part45.getSubmittedFileName();
            long size = part45.getSize();
            subirftp(in45, per.getCI() + "", nombre, size, per.getFOTO());
            per.fotoperfil(nombre);
            in45.close();
        }
        return idper + "";
    }

    private String telefonosDisponible(HttpServletRequest request, Conexion con) throws SQLException {
        RHH_TELEFONOS telefono = new RHH_TELEFONOS(con);
        List<RHH_TELEFONOS> listatelefono = telefono.TodosDisponibles();
        String html = "";
        for (int i = 0; i < listatelefono.size(); i++) {
            html += "<option value='" + listatelefono.get(i).getID() + "'>" + listatelefono.get(i).getNUMERO() + "</option>";
        }
        if (html.length() == 0) {
            return "<option value='0'>Sin Corporativo</option>";
        }
        return html;
    }

    private String validarci(HttpServletRequest request, Conexion con) throws SQLException, IOException, ServletException {
        String ci = request.getParameter("ci");
        if (ci.length() == 0) {
            return "true";
        }
        RHH_PERSONA persona = new RHH_PERSONA(con);
        persona = persona.Buscar(ci);
        if (persona == null) {
            return "true";
        }
        RHH_USUARIO usuario = new RHH_USUARIO(con);
        if (usuario.isBloqueado(ci) == 0) {
            return "false";
        }
        return ci;
    }


    private String modificarempleado(HttpServletRequest request, Conexion con) throws SQLException, IOException, ServletException, ParseException, IllegalStateException, FTPIllegalReplyException, FTPException, FTPDataTransferException, FTPAbortedException {
        RHH_PERSONA persona = new RHH_PERSONA(con);
        String ci = request.getParameter("ci");
        persona = persona.Buscar(ci);

        String depto = request.getParameter("depto");
        String nombre1 = request.getParameter("nombre1");
        String nombre2 = request.getParameter("nombre2");
        String apepat = request.getParameter("apepat");
        String apemat = request.getParameter("apemat");
        String email = request.getParameter("email");
        String telf = request.getParameter("telf");
        Part part = request.getPart("curr");
        InputStream in = part.getInputStream();

        RHH_REGIONAL reg = new RHH_REGIONAL(con);
        reg.setCon(con);
        reg = reg.BuscarXid(Double.parseDouble(depto));
        if (part != null && part.getSubmittedFileName().length() > 0) {
            String parrr = "curriculum_" + part.getSubmittedFileName();
            persona.setCURRICULUM(parrr);
            subirftp(in, ci, parrr, part.getSize(), "");
        }
        persona.setEMAIL(email);
        persona.setLUGAR_EMISION(reg.getACRONIMO());
        persona.setPRIMER_APELLIDO(apepat);
        persona.setPRIMER_NOMBRE(nombre1);
        persona.setSEGUNDO_NOMBRE(nombre2);
        persona.setSEGUNDO_APELLIDO(apemat);
        persona.setTELEFONO(telf);
        persona.Modificar();
        int idper = persona.getID();

        List<RHH_DATOS> dtlist = new RHH_DATOS(con).TodosDatos();
        RHH_PERSONA_DATOS pd = new RHH_PERSONA_DATOS(con);
        for (int i = 0; i < dtlist.size(); i++) {
            pd = new RHH_PERSONA_DATOS(con);
            String dato = request.getParameter(dtlist.get(i).getID() + "");
            if (dato != null) {
                if (dato.length() > 0) {
                    pd.Eliminar(idper, dtlist.get(i).getID());
                    pd.setID_DATOS(dtlist.get(i).getID());
                    pd.setID_PERSONA(idper);
                    pd.setDATO(dato);
                    pd.Insertar();
                }
            }
        }
        List<RHH_DATOS> doclist = new RHH_DATOS(con).TodosDocs();
        SimpleDateFormat sd = new SimpleDateFormat("dd/mm/yyyy");
        for (int i = 0; i < doclist.size(); i++) {
            pd = new RHH_PERSONA_DATOS(con);
            Part pdoc = request.getPart(doclist.get(i).getID() + "");
            String caduca = request.getParameter(doclist.get(i).getID() + "_o");
            if (pdoc != null) {
                String nom = pdoc.getSubmittedFileName();
                if (nom.length() > 0) {
                    pd.Eliminar(idper, doclist.get(i).getID());
                    if (caduca != null && caduca.length() > 0) {
                        pd.setCADUCIDAD(sd.parse(caduca));
                    }
                    pd.setID_DATOS(doclist.get(i).getID());
                    pd.setID_PERSONA(idper);
                    pd.setDATO(pdoc.getSubmittedFileName());
                    pd.Insertar();
                    in = pdoc.getInputStream();
                    subirftp(in, ci, pdoc.getSubmittedFileName(), pdoc.getSize(), "");
                }
            }
        }
        String anosexp = request.getParameter("anos");
        String prof = request.getParameter("prof");

        RHH_PERSONA_PROFESION pf = new RHH_PERSONA_PROFESION(con);
        pf.setID_PERSONA(idper);
        pf.setID_PROFESION(Integer.parseInt(prof));
        pf.setANOS(Integer.parseInt(anosexp));
        pf.EliminarXid();
        pf.Insertar();

        String usrs = request.getParameter("usrs");
        String pass = request.getParameter("pass");
        String cargo = request.getParameter("cargoe");

        RHH_USUARIO usu = new RHH_USUARIO(con);
        usu = usu.BuscarXidPersona(idper);
        usu.setUSUARIO(usrs);
        usu.setPASSWORD(pass);
        usu.setID_PERSONA(idper);
        usu.setID_CARGO(Integer.parseInt(cargo));
        usu.setESTADO(1);
        usu.setFLAG(1);
        usu.ModificarUSR(usu.getID_CARGO(), usu.getUSUARIO(), usu.getPASSWORD(), usu.getESTADO());
        RHH_TELEFONOS telfo = new RHH_TELEFONOS(con);
        telfo.EliminarXidUsuario(usu.getID());
        for (int i = 0; i < 100; i++) {
            String telf1 = request.getParameter("telefono" + i);
            if (telf1 != null && !telf1.equals("0")) {
                Double monto = Double.parseDouble(request.getParameter("montotelf" + i));
                telfo = telfo.BuscarxId(Integer.parseInt(telf1));
                telfo.setID_USUARIO(usu.getID());
                telfo.setMONTO_CREDITO(monto);
                telfo.modificar();
            } else {
                break;
            }
        }
        RHH_CUENTAS cuenta = new RHH_CUENTAS(con);
        cuenta.EliminarXidUsuario(usu.getID());
        for (int i = 0; i < 100; i++) {
            cuenta = new RHH_CUENTAS(con);
            String ncuenta = request.getParameter("cuenta" + i);
            if (ncuenta != null && !ncuenta.equals("")) {

                String banco = request.getParameter("banco" + i);
                cuenta.setBANCO(banco);
                cuenta.setCUENTA(ncuenta);
                cuenta.setID_USUARIO(usu.getID());
                cuenta.Insertar();
            } else {
                break;
            }
        }
        String estado = request.getParameter("estado");
        String fechaf = request.getParameter("fecha_fin");
        String fechai = request.getParameter("fecha_ini");
        SimpleDateFormat format = new SimpleDateFormat("dd/MM/yyyy");
        RHH_FECHAS_HITO fh = new RHH_FECHAS_HITO(con);
        if (estado.equals("0")) {
            if (!fechaf.equals("INDETERMINADO")) {
                fh = fh.BuscarxUsuarioEvento(21, usu.getID());
                if (fh == null && !fechaf.equals("INDETERMINADO")) {
                    fh = new RHH_FECHAS_HITO(con);
                    fh.setDESCRIPCION("Ampliacion de contratoo del empleado " + persona + " hasta " + fechaf);
                    fh.setID_USUARIO(usu.getID());
                    fh.setSALARIO(0.0);
                    fh.setID_EVENTO_HITO(10);
                    fh.Insertar();
                }
                if (fh != null && !fh.getFECHA().equals(fechaf)) {
                    fh.setDESCRIPCION("Se amplio el contrato del empleado " + persona + " de " + fh.getFECHA() + " hasta " + fechaf);
                    fh.setID_USUARIO(usu.getID());
                    fh.setSALARIO(0.0);
                    fh.setID_EVENTO_HITO(10);
                    fh.Insertar();
                }
            }
        } else {
            fh.EliminarIncrementoSalarial(usu.getID());
            fh.EliminarDespedido(usu.getID());
            fh.EliminarFinalizacionContrato(usu.getID());
            fh.EliminarRenuncia(usu.getID());
            fh.EliminarConclusionServicio(usu.getID());
            fh.EliminarContrato(usu.getID());
            fh.EliminarPromociones(usu.getID());
            fh.setDESCRIPCION("CONTRATACION");
            fh.setID_EVENTO_HITO(3);
            fh.setID_USUARIO(usu.getID());
            fh.setFECHA(format.parse(fechai));
            fh.Insertar();
            if (!fechaf.equals("INDETERMINADO")) {
                fh = new RHH_FECHAS_HITO(con);
                fh.setDESCRIPCION("FINALIZACION DE CONTRATO");
                fh.setID_EVENTO_HITO(21);
                fh.setID_USUARIO(usu.getID());
                fh.setSALARIO(0.0);
                fh.setFECHA(format.parse(fechaf));
                fh.Insertar();
            }
        }

        List<ADM_TIPO_ACTIVO_FUNGIBLE> af = new ADM_TIPO_ACTIVO_FUNGIBLE(con).TodosActivos();
        ADM_TIPO_ACT_FUN_USU fungi = new ADM_TIPO_ACT_FUN_USU(con);
        fungi.EliminarXidusuario(usu.getID());
        for (int i = 0; i < af.size(); i++) {
            String act = request.getParameter("activo_" + af.get(i).getID());
            if (act != null) {
                String cant = request.getParameter("activo_cant_" + af.get(i).getID());
                if (cant.length() == 0) {
                    continue;
                }
                ADM_TIPO_ACT_FUN_USU tafu = new ADM_TIPO_ACT_FUN_USU(usu.getID(), af.get(i).getID(), Integer.parseInt(cant));
                tafu.setCon(con);
                tafu.Insertar();
            }
        }
        af = new ADM_TIPO_ACTIVO_FUNGIBLE(con).TodosFungibles();
        for (int i = 0; i < af.size(); i++) {
            String act = request.getParameter("fungibles_" + af.get(i).getID());

            if (act != null) {
                String cant = request.getParameter("fungibles_cant_" + af.get(i).getID());
                if (cant.length() == 0) {
                    continue;
                }
                ADM_TIPO_ACT_FUN_USU tafu = new ADM_TIPO_ACT_FUN_USU(usu.getID(), af.get(i).getID(), Integer.parseInt(cant));
                tafu.setCon(con);
                tafu.Insertar();
            }
        }

        Part part45 = request.getPart("file");
        if (part45 != null && part45.getSubmittedFileName().length() > 0) {
            InputStream in45 = part45.getInputStream();
            RHH_PERSONA per = new RHH_PERSONA(con).BuscarxID(idper);
            String nombre = "perfil_" + part45.getSubmittedFileName();
            long size = part45.getSize();
            subirftp(in45, per.getCI() + "", nombre, size, per.getFOTO());
            per.fotoperfil(nombre);
            in45.close();
        }
        if (estado.equals("1")) {
            usu.setCon(new Conexion("broker", "oracle123"));
            usu.Activar();
            return usu.getID_CARGO() + "";
        }
        return idper + "";
    }

    private void subirftp(InputStream in, String ci, String nombre, long size, String old) throws IllegalStateException, IOException, FTPIllegalReplyException, FTPException, FTPDataTransferException, FTPAbortedException {
        if (in != null && !nombre.equals("")) {
            FTPClient client = new FTPClient();
            client.connect("192.168.0.101");
            client.login("postulado", "oracle123");

            try {
                client.createDirectory(ci);
                client.changeDirectory(ci);
            } catch (Exception e) {
                client.changeDirectory(ci);
            }
            try {
                client.deleteFile(old);
            } catch (Exception e) {
            }
            client.upload(nombre, in, size, 0, null);

            client.disconnect(false);
        }
    }

    public String crearActividad(Conexion con, HttpServletRequest request) throws SQLException {
        String html = "";
        String desc = request.getParameter("desc");
        String color = request.getParameter("color");
        int tipoa = Integer.parseInt(request.getParameter("tipo"));

        RHH_ACTIVIDAD tipo = new RHH_ACTIVIDAD(desc, tipoa, color);
        tipo.setCon(con);
        int id = tipo.Insertar();
        html = "<div class='draggable' data-estado='actividad' style=' width: 75px; height: 50px; background:" + tipo.getCOLOR() + "' data-idactividad=" + id + ">" + tipo.getDESCRIPCION() + "</div>";
        return html;
    }

    private String agregaractividad(Conexion con, HttpServletRequest request) throws SQLException {
        int idactividad = Integer.parseInt(request.getParameter("idact"));
        int idcargo = Integer.parseInt(request.getParameter("idcargo"));
        if (idcargo != 0) {
            int dia = Integer.parseInt(request.getParameter("dia"));
            int mes = Integer.parseInt(request.getParameter("mes"));
            int ano = Integer.parseInt(request.getParameter("ano"));
            int hini = Integer.parseInt(request.getParameter("hini"));
            int hfin = Integer.parseInt(request.getParameter("hfin"));
            int mini = Integer.parseInt(request.getParameter("mini"));
            int mfin = Integer.parseInt(request.getParameter("mfin"));
            RHH_ACTIVIDAD tipo = new RHH_ACTIVIDAD(con).Buscar(idactividad);
            RHH_ACTIVIDAD_CARGO cal = new RHH_ACTIVIDAD_CARGO(con);
            Calendar fecha = new GregorianCalendar();
            fecha.set(ano, mes, dia, hini, mini, 0);
            cal.setID_ACTIVIDAD(tipo.getID());
            cal.setHORA_INICIO(fecha.getTime());
            fecha.set(ano, mes, dia, hfin, mfin, 0);
            cal.setHORA_FIN(fecha.getTime());
            cal.setID_CARGO(idcargo);
            int id = cal.Insertar();
            String json = "[\"<div style='background:" + tipo.getCOLOR() + "; width: 10px; height: 10px; display:inline-block'></div>\"";
            json += ",\"<div style='background:#e0d954; margin: 0px auto; padding: 4px; width: 90%;'>" + tipo.getDESCRIPCION() + " " + hini + ":" + mini + " - " + hfin + ":" + mfin + "<span onclick='eliminarActividad(" + id + ",this);'>(X)</span></div>\"]";
            return json;
        } else {
            return false + "";
        }
    }

    private String eliminarActividadCargo(Conexion con, HttpServletRequest request) throws SQLException {
        int id = Integer.parseInt(request.getParameter("id"));
        RHH_ACTIVIDAD_CARGO sct = new RHH_ACTIVIDAD_CARGO(con);
        sct.Eliminar(id);
        return true + "";
    }

    public String cargarCalendario(Conexion con, HttpServletRequest request) throws SQLException {
        String html = "";
        int ano = Integer.parseInt(request.getParameter("ano"));
        int mes = Integer.parseInt(request.getParameter("mes"));

        int idcargo = Integer.parseInt(request.getParameter("idcargo"));

        Calendar cal = new GregorianCalendar();
        cal.set(ano, mes, 1);
        int semanadas = cal.getActualMaximum(Calendar.WEEK_OF_MONTH) + 1;
        int maximodia = cal.getActualMaximum(Calendar.DAY_OF_MONTH);
        int diames = 1;
        RHH_ACTIVIDAD_CARGO calcarg = new RHH_ACTIVIDAD_CARGO(con);
        RHH_CALENDARIO_EMPRESA calemp = new RHH_CALENDARIO_EMPRESA(con);
        RHH_TIPO_DIA tipo = new RHH_TIPO_DIA(con);
        int j = cal.get(Calendar.DAY_OF_WEEK);
        int semanaactual = 1;

        if (j == 1) {
            semanadas++;
            j = 0;
        }

        html += "<thead>";
        html += "<th>Lunes</th>";
        html += "<th>Martes</th>";
        html += "<th>Miercoles</th>";
        html += "<th>Jueves</th>";
        html += "<th>Viernes</th>";
        html += "<th>Sabado</th>";
        html += "<th>Domingo</th>";
        html += "</thead>";
        html += "<tbody>";
        String actividad = "";
        String actividads = "";
        while (semanaactual <= semanadas) {
            html += "<tr>";
            cal.set(ano, mes, diames);

            int diasemana = 1;
            while (diasemana <= 7) {
                if (diasemana + 1 == j || j == 0) {
                    if (j == 0) {
                        html += "<td class='diasC' style=' height: 27px;'></td>";
                        html += "<td class='diasC' style=' height: 27px;'></td>";
                        html += "<td class='diasC' style=' height: 27px;'></td>";
                        html += "<td class='diasC' style=' height: 27px;'></td>";
                        html += "<td class='diasC' style=' height: 27px;'></td>";
                        html += "<td class='diasC' style=' height: 27px;'></td>";

                        int eventoemp = calemp.BuscarEvento(diames, mes + 1, ano);
                        RHH_TIPO_DIA asd = tipo.Buscar(eventoemp);
                        String colorx = asd == null ? "" : tipo.Buscar(eventoemp).getCOLOR();
                        List<RHH_ACTIVIDAD_CARGO> lista = calcarg.Buscar(diames, mes + 1, ano, idcargo);
                        if (eventoemp != 0) {

                            for (int i = 0; i < lista.size(); i++) {
                                RHH_ACTIVIDAD act = new RHH_ACTIVIDAD(con).Buscar(lista.get(i).getID_ACTIVIDAD());
                                actividad += "<div style='background:" + act.getCOLOR() + "; width: 10px; height: 10px; display:inline-block'></div>";
                                actividads += "<div style='background:" + act.getCOLOR() + "; margin: 0px auto; padding: 4px; width: 90%;'  >"
                                        + act.getDESCRIPCION() + " " + lista.get(i).getHORA_INICIOSF() + " - " + lista.get(i).getHORA_FINSF() + "<span onclick='eliminarActividad(" + lista.get(i).getID() + ",this);'>(X)</span>"
                                        + "</div>";
                            }
                            if (actividads.length() > 0) {
                                String algo = "";
                            }
                            html += "<td class='diasC' data-dia='" + diames + "' data-detalle=\"" + actividads + "\"  style='background: " + colorx + ";  height: 27px;'><div style='font-size:25px;'>" + diames + "</div>";
                            html += actividad;
                            html += "</td>";
                            actividads = "";
                            actividad = "";
                        } else {
                            for (int i = 0; i < lista.size(); i++) {
                                RHH_ACTIVIDAD act = new RHH_ACTIVIDAD(con).Buscar(lista.get(i).getID_ACTIVIDAD());
                                actividad += "<div style='background:" + act.getCOLOR() + "; width: 10px; height: 10px; display:inline-block'></div>";
                                actividads += "<div style='background:" + act.getCOLOR() + "; margin: 0px auto; padding: 4px; width: 90%;'  >"
                                        + act.getDESCRIPCION() + " " + lista.get(i).getHORA_INICIOSF() + " - " + lista.get(i).getHORA_FINSF() + "<span onclick='eliminarActividad(" + lista.get(i).getID() + ",this);'>(X)</span>"
                                        + "</div>";
                            }
                            if (actividads.length() > 0) {
                                String algo = "";
                            }
                            html += "<td class='diasC' data-dia='" + diames + "' data-detalle=\"" + actividads + "\"  style='background: " + colorx + ";  height: 27px;'><div style='font-size:25px;'>" + diames + "</div>";
                            html += actividad;
                            html += "</td>";
                            actividads = "";
                            actividad = "";
                        }
                        diames++;
                        j = 1;
                        break;
                    } else {
                        if (diames <= maximodia) {
                            int eventoemp = calemp.BuscarEvento(diames, mes + 1, ano);
                            RHH_TIPO_DIA asd = tipo.Buscar(eventoemp);
                            String colorx = asd == null ? "" : tipo.Buscar(eventoemp).getCOLOR();
                            List<RHH_ACTIVIDAD_CARGO> lista = calcarg.Buscar(diames, mes + 1, ano, idcargo);
                            if (eventoemp != 0) {
                                for (int i = 0; i < lista.size(); i++) {
                                    RHH_ACTIVIDAD act = new RHH_ACTIVIDAD(con).Buscar(lista.get(i).getID_ACTIVIDAD());
                                    actividad += "<div style='background:" + act.getCOLOR() + "; width: 10px; height: 10px; display:inline-block'></div>";
                                    actividads += "<div style='background:" + act.getCOLOR() + "; margin: 0px auto; padding: 4px; width: 90%;'  >"
                                            + act.getDESCRIPCION() + " " + lista.get(i).getHORA_INICIOSF() + " - " + lista.get(i).getHORA_FINSF() + "<span onclick='eliminarActividad(" + lista.get(i).getID() + ",this);'>(X)</span>"
                                            + "</div>";
                                }
                                html += "<td class='diasC' data-dia='" + diames + "' data-detalle=\"" + actividads + "\"  style='background: " + colorx + ";  height: 27px;'><div style='font-size:25px;'>" + diames + "</div>";
                                html += actividad;
                                html += "</td>";
                                actividads = "";
                                actividad = "";
                            } else {
                                for (int i = 0; i < lista.size(); i++) {
                                    RHH_ACTIVIDAD act = new RHH_ACTIVIDAD(con).Buscar(lista.get(i).getID_ACTIVIDAD());
                                    actividad += "<div style='background:" + act.getCOLOR() + "; width: 10px; height: 10px; display:inline-block'></div>";
                                    actividads += "<div style='background:" + act.getCOLOR() + "; margin: 0px auto; padding: 4px; width: 90%;'  >"
                                            + act.getDESCRIPCION() + " " + lista.get(i).getHORA_INICIOSF() + " - " + lista.get(i).getHORA_FINSF() + "<span onclick='eliminarActividad(" + lista.get(i).getID() + ",this);'>(X)</span>"
                                            + "</div>";
                                }
                                html += "<td class='diasC' data-dia='" + diames + "' data-detalle=\"" + actividads + "\"  style='background: " + colorx + ";  height: 27px;'><div style='font-size:25px;'>" + diames + "</div>";
                                html += actividad;
                                html += "</td>";
                                actividads = "";
                                actividad = "";
                            }
                        } else {
                            html += "<td class='diasC'></td>";
                        }
                        diames++;
                        j++;
                    }
                } else {
                    html += "<td class='diasC'></td>";
                }
                diasemana++;
            }
            j = 2;
            html += "</tr>";
            semanaactual++;
        }
        html += "</tbody>";
        return html;
    }

    public String cargarPerfiles(Conexion con, HttpServletRequest request) throws SQLException {
        int idcargo = Integer.parseInt(request.getParameter("idcargo"));
        RHH_CARGO cargo = new RHH_CARGO(con);
        cargo.setCon(con);

        cargo = cargo.BuscarXid(idcargo);
        SIS_PERFILES perfil = new SIS_PERFILES();
        perfil.setCon(con);
        List<SIS_PERFILES> ListaInactivos = perfil.TodosLosInactivos(cargo.getID(), "");
        List<SIS_PERFILES> ListaActivos = perfil.TodosLosActivos(cargo.getID(), "");
        String html = "<div class='contenedor50 c1' style=\"border-right: solid white thin;\" data-estado='inactivo'>";
        for (int i = 0; i < ListaInactivos.size(); i++) {
            html += "<div class='draggable ui-draggable ui-draggable-handle ui-droppable' data-estado='inactivo' data-idRol=" + ListaInactivos.get(i).getID() + ">"
                    + ListaInactivos.get(i).getDESCRIPCION()
                    + "</div>";
        }
        html += "</div><div class='contenedor50 c2' data-estado='activo'>";
        for (int i = 0; i < ListaActivos.size(); i++) {
            html += "<div class='draggable ui-draggable ui-draggable-handle ui-droppable' data-estado='activo' data-idRol=" + ListaActivos.get(i).getID() + ">"
                    + ListaActivos.get(i).getDESCRIPCION()
                    + "</div>";
        }
        html += "</div>";
        return html;
    }

    public String cargarHorario(Conexion con, HttpServletRequest request) throws SQLException {
        int idcargo = Integer.parseInt(request.getParameter("idcargo"));
        List<RHH_CARGO_HORARIO> ListaActivos = new RHH_CARGO_HORARIO(con).TodosActivos(idcargo);
        List<RHH_HORARIO> ListaInactivos = new RHH_HORARIO(con).horarioSinAsignar(idcargo);
        RHH_HORARIO hor = new RHH_HORARIO(con);
        String html = "<div class='contenedor50 c1' style=\"border-right: solid white thin;\" data-estado='inactivo'>";
        for (int i = 0; i < ListaInactivos.size(); i++) {//inactivos
            hor = ListaInactivos.get(i);
            html += "<div class='draggable ui-draggable ui-draggable-handle ui-droppable' data-estado='inactivo' data-idhorario=" + hor.getID() + ">"
                    + "<span class='negrillaenter'>" + hor.getDESCRIPCION()
                    + "</span><span>" + hor.getHORA_INICIOSD() + " - " + hor.getHORA_FINSD()
                    + "</span></div>";
        }
        html += "</div><div class='contenedor50 c2' data-estado='activo'>";
        for (int i = 0; i < ListaActivos.size(); i++) {
            hor = hor.BuscarxID(ListaActivos.get(i).getID_HORARIO());
            html += "<div class='draggable ui-draggable ui-draggable-handle ui-droppable' data-estado='activo' data-idhorario=" + ListaActivos.get(i).getID_HORARIO() + ">"
                    + "<span class='negrillaenter'>" + hor.getDESCRIPCION()
                    + "</span><span>" + hor.getHORA_INICIOSD() + " - " + hor.getHORA_FINSD()
                    + "</span></div>";
        }
        html += "</div>";
        return html;
    }

    public String agregarPerfil(Conexion con, HttpServletRequest request, RHH_USUARIO usuario) throws SQLException {
        RHH_CARGO_PERFIL perfil = new RHH_CARGO_PERFIL();
        perfil.setCon(con);
        int idcargo = Integer.parseInt(request.getParameter("idcargo"));
        double idperfil = Double.parseDouble(request.getParameter("idperfil"));
        try {
            perfil = perfil.BuscarXid(idcargo, idperfil);
            perfil.Desabilitar(idcargo, idperfil);
            SIS_PERFILES per = new SIS_PERFILES();
            per.setCon(con);
            per = per.BuscarXid(idperfil);
            RHH_CARGO car = new RHH_CARGO(con);
            car.setCon(con);
            car = car.BuscarXid(idcargo);
            SIS_LOG.LOG(usuario.getID(), 2, "QUITO EL PERFIL " + per.getDESCRIPCION() + " DE EL CARGO " + car.getDESCRIPCION(), con);
        } catch (Exception ex) {
            perfil = new RHH_CARGO_PERFIL();
            perfil.setCon(con);
            perfil.Abilitar(idcargo, idperfil);
            SIS_PERFILES per = new SIS_PERFILES();
            per.setCon(con);
            per = per.BuscarXid(idperfil);
            RHH_CARGO car = new RHH_CARGO(con);
            car.setCon(con);
            car = car.BuscarXid(idcargo);
            SIS_LOG.LOG(usuario.getID(), 2, "AGREGO EL PERFIL " + per.getDESCRIPCION() + " A EL CARGO " + car.getDESCRIPCION(), con);
        }
        return cargarPerfiles(con, request);
    }

    public String agregarhorario(Conexion con, HttpServletRequest request, RHH_USUARIO usuario) throws SQLException {
        int idcargo = Integer.parseInt(request.getParameter("idcargo"));
        int idhorario = Integer.parseInt(request.getParameter("idhorario"));
        RHH_CARGO_HORARIO ch = new RHH_CARGO_HORARIO(idcargo, idhorario);
        ch.setCon(con);
        try {
            ch.Insertar();
            return cargarHorario(con, request);
        } catch (Exception ex) {
            ch.EliminarXid();
            return cargarHorario(con, request);
        }

    }

    public String buscarRegional(HttpServletRequest request, Conexion con) throws SQLException {
        double IdDepartamento = Double.parseDouble(request.getParameter("Iddepartamento"));
        RHH_REGIONAL_DEPTO regional_depto = new RHH_REGIONAL_DEPTO();
        regional_depto.setCon(con);
        List<RHH_REGIONAL_DEPTO> listareg = regional_depto.TodosLosActivos(IdDepartamento);
        String html = "<option value='0'>-TODAS-</option>";
        for (int i = 0; i < listareg.size(); i++) {
            RHH_REGIONAL reg = new RHH_REGIONAL(con);
            reg.setCon(con);
            reg = reg.BuscarXid(listareg.get(i).getID_REGIONAL());
            html += "<option value=" + (int) reg.getID() + ">" + reg.getDESCRIPCION() + "</option>";
        }

        return html;
    }

    public String cambiarReferencia(HttpServletRequest request, Conexion con) throws SQLException, Exception {
        double cargoid = Double.parseDouble(request.getParameter("cargo"));
        double dpeto = Double.parseDouble(request.getParameter("departamento"));
        double regional = Double.parseDouble(request.getParameter("regional"));
        double sucursal = Double.parseDouble(request.getParameter("sucursal"));
        double referencia = Double.parseDouble(request.getParameter("referencia"));
        String suc = "null ";
        if (sucursal > 0.0) {
            suc = sucursal + "";
        }
        String reg = "null ";
        if (regional > 0.0) {
            reg = regional + "";
        }
        String dep6 = "null ";
        if (dpeto > 0.0) {
            dep6 = dpeto + "";
        }
        RHH_FECHAS_HITO hito = new RHH_FECHAS_HITO(con);
        RHH_USUARIO usuario = new RHH_USUARIO(con);
        RHH_CARGO cargo = new RHH_CARGO(con);
        RHH_PERSONA persona = new RHH_PERSONA(con);
        RHH_DEPARTAMENTO dpto = new RHH_DEPARTAMENTO(con);
        RHH_REGIONAL reg12 = new RHH_REGIONAL(con);
        RHH_SUCURSAL sucurs = new RHH_SUCURSAL(con);
        RHH_CARGO_DEP_REG_SUC dep = new RHH_CARGO_DEP_REG_SUC(con);
        RHH_CARGO_DEP_REG_SUC dep2 = new RHH_CARGO_DEP_REG_SUC(con);
        ArrayList<Integer> listaId = new ArrayList<Integer>();
        listaId.add((int) cargoid);
        String actualizar = "";
        Calendar c = new GregorianCalendar();
        actualizar = "update BROKER.RHH_CARGO set ID_DEPENDENCIA=" + referencia + " where ID=" + cargoid;
        con.EjecutarSentencia(actualizar);
        while (!listaId.isEmpty()) {
            int id = listaId.get(0);
            listaId.remove(0);
            String consulta = "SELECT RHH_CARGO.ID FROM BROKER.RHH_CARGO WHERE ID_DEPENDENCIA =" + id + " and ESTADO=0";
            ResultSet rs = con.EjecutarConsulta(consulta);
            while (rs.next()) {
                listaId.add(rs.getInt("ID"));
            }
            actualizar = "update BROKER.RHH_CARGO_DEP_REG_SUC set ID_SUCURSAL=" + suc + ",ID_DEPTO=" + dep6 + ",ID_REGIONAL=" + reg + " where ID_CARGO=" + id;
            con.EjecutarSentencia(actualizar);
            List<RHH_USUARIO> listau = usuario.BuscarXCargo((int) id);
            dep2 = dep2.BuscarXCargos(id);
            for (int i = 0; i < listau.size(); i++) {
                persona = persona.BuscarxID(listau.get(i).getID_PERSONA());
                hito.setFECHA(c.getTime());
                hito.setID_USUARIO(listau.get(i).getID());
                if (dpeto != dep2.getID_DEPTO()) {
                    dpto = dpto.BuscarXid(dep2.getID_DEPTO());
                    hito.setDESCRIPCION("Se traslado al empleado " + persona.getPRIMER_NOMBRE() + " " + persona.getPRIMER_APELLIDO() + " al departamento " + dpto.getDESCRIPCION());
                    hito.setID_EVENTO_HITO(6);
                    hito.Insertar();
                }
                if (regional != dep2.getID_REGIONAL()) {
                    reg12 = reg12.BuscarXid(dep2.getID_REGIONAL());
                    hito.setDESCRIPCION("Se traslado al empleado " + persona.getPRIMER_NOMBRE() + " " + persona.getPRIMER_APELLIDO() + " a la regional " + reg12.getDESCRIPCION());
                    hito.setID_EVENTO_HITO(5);
                    hito.Insertar();
                }
                if (sucursal != dep2.getID_SUCURSAL()) {
                    sucurs = sucurs.BuscarXid(dep2.getID_SUCURSAL());
                    hito.setDESCRIPCION("Se traslado al empleado " + persona.getPRIMER_NOMBRE() + " " + persona.getPRIMER_APELLIDO() + " a la sucursal" + sucurs.getDESCRIPCION());
                    hito.setID_EVENTO_HITO(4);
                    hito.Insertar();
                }
            }
            referencia = id;
        }

        con.EjecutarSentencia(actualizar);
        con.commit();
        return "true";
    }

    public String buscarSucursales(HttpServletRequest request, Conexion con) {
        RHH_SUCURSAL suc = new RHH_SUCURSAL(con);
        suc.setCon(con);

        double IdRegional = Double.parseDouble(request.getParameter("Idregional"));

        List<RHH_SUCURSAL> Lista = suc.BuscarXRegional(IdRegional);
        String html = "<option value='0'>-TODAS-</option>";
        for (int i = 0; i < Lista.size(); i++) {
            html += "<option value=" + (int) Lista.get(i).getID() + ">" + Lista.get(i).getDESCRIPCION() + "</option>";
        }

        return html;
    }

    public String GuardarNuevo(HttpServletRequest request, Conexion con, RHH_USUARIO usr) throws SQLException, Exception {
        int idcargonew = 0;
        String desc = request.getParameter("descripcion");
        String perfil = request.getParameter("perfil");
        int dependencia = Integer.parseInt(request.getParameter("dependencia"));
        int staff = Integer.parseInt(request.getParameter("staff"));
        int idcargo = Integer.parseInt(request.getParameter("id"));
        int tipo = Integer.parseInt(request.getParameter("tipo"));
        RHH_CARGO cargo = new RHH_CARGO(con);
        cargo.setCon(con);
        cargo = cargo.BuscarXid(dependencia);
        RHH_CARGO cargonew = new RHH_CARGO(dependencia, tipo, cargo.getNIVEL() + 1, desc, perfil);
        cargonew.setSTAFF(staff);
        cargonew.setCon(con);
        if (idcargo != 0) {
            cargonew.setID(idcargo);
            cargonew.update();
            RHH_CARGO_DATOS carda = new RHH_CARGO_DATOS(con);
            carda.EliminarXCargo(idcargo);
            idcargonew = idcargo;
        } else {
            idcargonew = cargonew.Insertar();
        }

        String listadatos = request.getParameter("listadatos");
        StringTokenizer tokendato = new StringTokenizer(listadatos, ",");
        while (tokendato.hasMoreTokens()) {
            int iddato = Integer.parseInt(tokendato.nextToken());
            RHH_CARGO_DATOS cardat = new RHH_CARGO_DATOS(idcargonew, iddato);
            cardat.setCon(con);
            cardat.Insertar();
        }

        String listadocs = request.getParameter("listadocs");
        StringTokenizer tokendocs = new StringTokenizer(listadocs, ",");
        while (tokendocs.hasMoreTokens()) {
            int iddocs = Integer.parseInt(tokendocs.nextToken());
            RHH_CARGO_DATOS cardoc = new RHH_CARGO_DATOS(idcargonew, iddocs);
            cardoc.setCon(con);
            cardoc.Insertar();
        }
        if (idcargo == 0) {
            double regional = Double.parseDouble(request.getParameter("IdRegional"));
            double sucursal = Double.parseDouble(request.getParameter("IdSucursal"));
            double dpto = Double.parseDouble(request.getParameter("Iddepartamento"));
            RHH_CARGO_DEP_REG_SUC dprepsuc = new RHH_CARGO_DEP_REG_SUC(0.0, idcargonew, sucursal, dpto, regional);
            dprepsuc.setCon(con);
            dprepsuc.Insertar();
            SIS_LOG.LOG(usr.getID(), 2, "CREO EL CARGO " + desc, con);
        } else {

            double regional = Double.parseDouble(request.getParameter("IdRegional"));
            double sucursal = Double.parseDouble(request.getParameter("IdSucursal"));
            double dpto = Double.parseDouble(request.getParameter("Iddepartamento"));
            ArrayList<Integer> listaId = new ArrayList<Integer>();
            listaId.add(idcargo);
            String actualizar = "";
            RHH_CARGO_DEP_REG_SUC dep2 = new RHH_CARGO_DEP_REG_SUC(con);
            RHH_PERSONA persona = new RHH_PERSONA(con);
            RHH_FECHAS_HITO hito = new RHH_FECHAS_HITO(con);
            Calendar c = new GregorianCalendar();
            RHH_DEPARTAMENTO dpto2 = new RHH_DEPARTAMENTO(con);
            RHH_REGIONAL reg12 = new RHH_REGIONAL(con);
            RHH_SUCURSAL sucurs = new RHH_SUCURSAL(con);
            RHH_USUARIO usuario = new RHH_USUARIO(con);
            while (!listaId.isEmpty()) {
                int id = listaId.get(0);
                listaId.remove(0);
                String consulta = "SELECT RHH_CARGO.ID FROM BROKER.RHH_CARGO WHERE ID_DEPENDENCIA =" + id + " and ESTADO=0";
                ResultSet rs = con.EjecutarConsulta(consulta);

                while (rs.next()) {
                    listaId.add(rs.getInt("ID"));
                }
                actualizar = "update BROKER.RHH_CARGO_DEP_REG_SUC set ID_SUCURSAL=" + sucursal + ",ID_DEPTO=" + dpto + ",ID_REGIONAL=" + regional + " where ID_CARGO=" + id;
                con.EjecutarSentencia(actualizar);
                List<RHH_USUARIO> listau = usuario.BuscarXCargo((int) id);
                dep2 = dep2.BuscarXCargos(id);
                for (int i = 0; i < listau.size(); i++) {
                    persona = persona.BuscarxID(listau.get(i).getID_PERSONA());
                    hito.setFECHA(c.getTime());
                    hito.setID_USUARIO(listau.get(i).getID());
                    if (dpto != dep2.getID_DEPTO()) {
                        dpto2 = dpto2.BuscarXid(dep2.getID_DEPTO());
                        hito.setDESCRIPCION("Se traslado al empleado " + persona.getPRIMER_NOMBRE() + " " + persona.getPRIMER_APELLIDO() + " al departamento " + dpto2.getDESCRIPCION());
                        hito.setID_EVENTO_HITO(6);
                        hito.Insertar();
                    }
                    if (regional != dep2.getID_REGIONAL()) {
                        reg12 = reg12.BuscarXid(dep2.getID_REGIONAL());
                        hito.setDESCRIPCION("Se traslado al empleado " + persona.getPRIMER_NOMBRE() + " " + persona.getPRIMER_APELLIDO() + " a la regional " + reg12.getDESCRIPCION());
                        hito.setID_EVENTO_HITO(5);
                        hito.Insertar();
                    }
                    if (sucursal != dep2.getID_SUCURSAL()) {
                        sucurs = sucurs.BuscarXid(dep2.getID_SUCURSAL());
                        hito.setDESCRIPCION("Se traslado al empleado " + persona.getPRIMER_NOMBRE() + " " + persona.getPRIMER_APELLIDO() + " a la sucursal" + sucurs.getDESCRIPCION());
                        hito.setID_EVENTO_HITO(4);
                        hito.Insertar();
                    }
                }
            }
            SIS_LOG.LOG(usr.getID(), 2, "MODIFICO EL CARGO " + desc, con);
        }
        return idcargonew + "";
    }

    public String obtenerCargo(HttpServletRequest request, Conexion con, RHH_USUARIO usr) throws SQLException {
        try {
            int id = Integer.parseInt(request.getParameter("id"));
            RHH_CARGO cargo = new RHH_CARGO(con);
            cargo.setCon(con);
            cargo = cargo.BuscarXid(id);
            String html = "{\"desc\":\"" + cargo.getDESCRIPCION() + "\", \"tipo\":\"" + cargo.getID_TIPO_DE_CARGO() + "\", \"perfil\":\"" + cargo.getPERFIL();
            RHH_CARGO_DATOS datos = new RHH_CARGO_DATOS(con);
            List<RHH_CARGO_DATOS> list = datos.buscarXcargo(id);
            String scargo = "[";
            for (int i = 0; i < list.size(); i++) {
                datos = list.get(i);
                scargo += datos.getID_DATOS() + ",";
            }
            if (scargo.length() > 1) {
                scargo = scargo.substring(0, scargo.length() - 1);
            }
            html = html + "\",\"datos\":" + scargo + "]" + "}";
            return html;
        } catch (Exception e) {
            con.rollback();
        }
        return "{}";
    }

    private String eliminarDato(Conexion con, HttpServletRequest request, RHH_USUARIO usuario) throws SQLException {
        int id = Integer.parseInt(request.getParameter("id"));
        RHH_DATOS dato = new RHH_DATOS(con);
        dato.EliminarXid(id);
        return "true";
    }

    public String buscarDependiente(Conexion con, HttpServletRequest request) throws SQLException {

        RHH_CARGO cargo = new RHH_CARGO(con);
        cargo.setCon(con);
        String html = "{\"tiposcargo\":[";
        html += "],\"lista_datos\":[ ";
        List<RHH_DATOS> ListaDatos = new RHH_DATOS(con).TodosDatos();
        for (int j = 0; j < ListaDatos.size(); j++) {
            html += "\"<li><span>" + ListaDatos.get(j).getDESCRIPCION() + ":</span><input type='checkbox' value='" + ListaDatos.get(j).getID() + "'/><span onclick='eliminardato(" + ListaDatos.get(j).getID() + ",this);'>(X)</span></li>\",";
        }
        html = html.substring(0, html.length() - 1) + "],\"lista_docs\":[ ";
        List<RHH_DATOS> ListaDocs = new RHH_DATOS(con).TodosDocs();
        for (int j = 0; j < ListaDocs.size(); j++) {
            html += "\"<li><span>" + ListaDocs.get(j).getDESCRIPCION() + ":</span><input type='checkbox' value='" + ListaDocs.get(j).getID() + "'/><span onclick='eliminardato(" + ListaDocs.get(j).getID() + ",this);'>(X)</span></li>\",";
        }
        html = html.substring(0, html.length() - 1) + "]";
        return html + "}";
    }

    public String insertarTCargo(Conexion con, HttpServletRequest request) throws SQLException {
        String desc = request.getParameter("desc");
        RHH_TIPOS_CARGO tipo = new RHH_TIPOS_CARGO(0, desc);
        tipo.setCon(con);
        int tcargo = tipo.Insertar();
        return "<option value='" + tcargo + "' selected='selected'>" + desc + "</option>";
    }

    public String insertardato(Conexion con, HttpServletRequest request) throws SQLException {
        String desc = request.getParameter("desc");
        int idcatdato = Integer.parseInt(request.getParameter("idtipo"));
        RHH_DATOS tipo = new RHH_DATOS(0, desc, 0, 1, idcatdato);
        tipo.setCon(con);
        int tcargo = tipo.Insertar();
        return "" + tcargo;
    }

    public String insertardocs(Conexion con, HttpServletRequest request) throws SQLException {
        String desc = request.getParameter("desc");
        int idcatdato = Integer.parseInt(request.getParameter("idtipo"));
        int obligar = Integer.parseInt(request.getParameter("obligar"));
        RHH_DATOS tipo = new RHH_DATOS(1, desc, 0, obligar, idcatdato);
        tipo.setCon(con);
        int tcargo = tipo.Insertar();
        return "" + tcargo;
    }

    /**
     * Returns a short description of the servlet.
     *
     * @return a String containing servlet description
     */
    @Override
    public String getServletInfo() {
        return "Short description";
    }// </editor-fold>

    private String nuebacatdato(Conexion con, HttpServletRequest request, RHH_USUARIO usuario) throws SQLException {
        String html = "";
        String desc = request.getParameter("desc");
        RHH_CATEGORIA_DATO cat = new RHH_CATEGORIA_DATO(con);
        cat.setDESCRIPCION(desc);
        int id = cat.Insertar();
        html += "<option val='" + id + "'>" + desc + "</option>";
        return html;
    }

}
